#ifndef DEVICE_CONFIG_H
#define DEVICE_CONFIG_H

#include <array>

enum LOT_GATEWAY{
    NMEA0183 = 10000000,
    FOLLOW_NMEA = 20000000,
    MODBUS = 30000000,
    OPC_UA = 40000000,
    CUSTOM = 50000000
};

// 删除语句 sys_config.hldkeymap
// DELETE FROM hldkeymap WHERE order_key >= 42

//enum en_ModbusRegisterNum
//{
//    Bit16_ab = 1,
//    Bool = 1,
//    Int16_ab = 1,
//    Float_abcd = 2,
//    Float_badc = 2,
//    Double_abcdefgh = 4,
//    Double_ghefcdab = 4,
//    Float_dcba = 2,
//    UInt16_ab = 1,
//    Int32_abcd = 2,
//    UInt32_abcd = 2,
//    Bit16_ba = 1,
//    UInt16_ba = 1,
//    Int16_ba = 1,
//    Float_cdab = 2,
//    Int32_cdab = 2,
//    Int32_dcba = 2,
//    Int32_badc = 2,
//    UInt32_cdab = 2,
//    UInt32_dcba = 2,
//    UInt32_badc = 2,
//    UInt64_abcdefgh = 4,
//    UInt64_ghefcdab = 4
//};

//// 根据Modbus的寄存器数据类型返回对应的寄存器个数
//int dataType2ModbusRegisterNum(int dataType)
//{
//    switch (dataType)
//    {
//    case 0:
//    {
//        return en_ModbusRegisterNum::Bit16_ab;
//    }
//        break;
//    case 1:
//    {
//        return en_ModbusRegisterNum::Bool;
//    }
//        break;
//    case 2:
//    {
//        return en_ModbusRegisterNum::Int16_ab;
//    }
//        break;
//    case 3:
//    {
//        return en_ModbusRegisterNum::Float_abcd;
//    }
//        break;
//    case 4:
//    {
//        return en_ModbusRegisterNum::Float_badc;
//    }
//        break;
//    case 5:
//    {
//        return en_ModbusRegisterNum::Double_abcdefgh;
//    }
//        break;
//    case 6:
//    {
//        return en_ModbusRegisterNum::Double_ghefcdab;
//    }
//        break;
//    case 7:
//    {
//        return en_ModbusRegisterNum::Float_dcba;
//    }
//        break;
//    case 8:
//    {
//        return en_ModbusRegisterNum::UInt16_ab;
//    }
//        break;
//    case 9:
//    {
//        return en_ModbusRegisterNum::Int32_abcd;
//    }
//        break;
//    case 10:
//    {
//        return en_ModbusRegisterNum::UInt32_abcd;
//    }
//        break;
//    case 11:
//    {
//        return en_ModbusRegisterNum::Bit16_ba;
//    }
//        break;
//    case 12:
//    {
//        return en_ModbusRegisterNum::UInt16_ba;
//    }
//        break;
//    case 13:
//    {
//        return en_ModbusRegisterNum::Int16_ba;
//    }
//        break;
//    case 14:
//    {
//        return en_ModbusRegisterNum::Float_cdab;
//    }
//        break;
//    case 15:
//    {
//        return en_ModbusRegisterNum::Int32_cdab;
//    }
//        break;
//    case 16:
//    {
//        return en_ModbusRegisterNum::Int32_dcba;
//    }
//        break;
//    case 17:
//    {
//        return en_ModbusRegisterNum::Int32_badc;
//    }
//        break;
//    case 18:
//    {
//        return en_ModbusRegisterNum::UInt32_cdab;
//    }
//        break;
//    case 19:
//    {
//        return en_ModbusRegisterNum::UInt32_dcba;
//    }
//        break;
//    case 20:
//    {
//        return en_ModbusRegisterNum::UInt32_badc;
//    }
//        break;
//    case 21:
//    {
//        return en_ModbusRegisterNum::UInt64_abcdefgh;
//    }
//        break;
//    case 22:
//    {
//        return en_ModbusRegisterNum::UInt64_ghefcdab;
//    }
//        break;
//    default:
//        return -1;
//        break;
//    }

//    return -1;
//}

enum en_ModbusRegisterNum
{
    Register_1 = 1,
    Register_2 = 2,
    Register_4 = 4
};

// 使用数组存储每个 dataType 对应的寄存器个数
constexpr std::array<int, 23> modbusRegisterNumMap = {{
                                                          en_ModbusRegisterNum::Register_1, // 0
                                                          en_ModbusRegisterNum::Register_1, // 1
                                                          en_ModbusRegisterNum::Register_1, // 2
                                                          en_ModbusRegisterNum::Register_2, // 3
                                                          en_ModbusRegisterNum::Register_2, // 4
                                                          en_ModbusRegisterNum::Register_4, // 5
                                                          en_ModbusRegisterNum::Register_4, // 6
                                                          en_ModbusRegisterNum::Register_2, // 7
                                                          en_ModbusRegisterNum::Register_1, // 8
                                                          en_ModbusRegisterNum::Register_2, // 9
                                                          en_ModbusRegisterNum::Register_2, // 10
                                                          en_ModbusRegisterNum::Register_1, // 11
                                                          en_ModbusRegisterNum::Register_1, // 12
                                                          en_ModbusRegisterNum::Register_1, // 13
                                                          en_ModbusRegisterNum::Register_2, // 14
                                                          en_ModbusRegisterNum::Register_2, // 15
                                                          en_ModbusRegisterNum::Register_2, // 16
                                                          en_ModbusRegisterNum::Register_2, // 17
                                                          en_ModbusRegisterNum::Register_2, // 18
                                                          en_ModbusRegisterNum::Register_2, // 19
                                                          en_ModbusRegisterNum::Register_2, // 20
                                                          en_ModbusRegisterNum::Register_4, // 21
                                                          en_ModbusRegisterNum::Register_4  // 22
                                                      }};

// 根据Modbus的寄存器数据类型返回对应的寄存器个数
int dataType2ModbusRegisterNum(int dataType)
{
    if (dataType >= 0 && dataType < modbusRegisterNumMap.size())
    {
        return modbusRegisterNumMap[dataType];
    }
    return -1;
}

#endif // DEVICECONFIG_H
